home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / src / demos / GL / atlantis / swim.c < prev    next >
C/C++ Source or Header  |  1994-08-01  |  3KB  |  103 lines

  1. /*
  2.  * Copyright 1992, 1993, 1994, Silicon Graphics, Inc.
  3.  * All Rights Reserved.
  4.  *
  5.  * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
  6.  * the contents of this file may not be disclosed to third parties, copied or
  7.  * duplicated in any form, in whole or in part, without the prior written
  8.  * permission of Silicon Graphics, Inc.
  9.  *
  10.  * RESTRICTED RIGHTS LEGEND:
  11.  * Use, duplication or disclosure by the Government is subject to restrictions
  12.  * as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
  13.  * and Computer Software clause at DFARS 252.227-7013, and/or in similar or
  14.  * successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
  15.  * rights reserved under the Copyright Laws of the United States.
  16.  */
  17. #include "gl.h"
  18. #include "device.h"
  19. #include "math.h"
  20. #include "atlantis.h"
  21. #include "fish.h"
  22.  
  23. int sign = 1;
  24.  
  25. whalopilot(struct fish *pfish)
  26. {
  27.     pfish->phi = -20.0;
  28.     pfish->theta = 0.0;
  29.     pfish->psi -= 0.5;
  30.  
  31.     pfish->x += WHALESPEED * pfish->v * cos(pfish->psi / RAD)
  32.                     * cos(pfish->theta / RAD);
  33.     pfish->y += WHALESPEED * pfish->v * sin(pfish->psi / RAD)
  34.                     * cos(pfish->theta / RAD);
  35.     pfish->z += WHALESPEED * pfish->v * sin(pfish->theta / RAD);
  36. }
  37.  
  38. sharkopilot(struct fish *pfish)
  39. {
  40.     float X,Y,Z,tpsi,ttheta,thetal;
  41.  
  42.     pfish->xt = 60000.0;
  43.     pfish->yt = 0.0;
  44.     pfish->zt = 0.0;
  45.  
  46.     X = pfish->xt - pfish->x;
  47.     Y = pfish->yt - pfish->y;
  48.     Z = pfish->zt - pfish->z;
  49.  
  50.     thetal = pfish->theta;
  51.  
  52.     ttheta = RAD * fatan( Z / (sqrt(X * X + Y * Y)));
  53.  
  54.     if(ttheta > pfish->theta + 0.25)
  55.         pfish->theta += 0.5;
  56.     else if(ttheta < pfish->theta - 0.25)
  57.         pfish->theta -= 0.5;
  58.  
  59.     if(pfish->theta >  90.0) pfish->theta =  90.0;
  60.     if(pfish->theta < -90.0) pfish->theta = -90.0;
  61.  
  62.     pfish->dtheta = pfish->theta - thetal;
  63.  
  64.     tpsi =  RAD * fatan2(Y,X);
  65.         
  66.     pfish->attack = 0;
  67.  
  68.     if(fabs(tpsi - pfish->psi) < 10.0) {
  69.         pfish->attack = 1;
  70.     } else if(fabs(tpsi - pfish->psi) < 45.0) {
  71.         if(pfish->psi > tpsi) {
  72.             pfish->psi -= 0.5;
  73.             if(pfish->psi < -180.) pfish->psi += 360.;
  74.         } else if(pfish->psi < tpsi) {
  75.             pfish->psi += 0.5;
  76.             if(pfish->psi >  180.) pfish->psi -= 360.;
  77.         }
  78.     } else {
  79.         if (rand()%100 > 98) sign = 1 - sign;
  80.         pfish->psi += sign;
  81.         if(pfish->psi >  180.) pfish->psi -= 360.;
  82.         if(pfish->psi < -180.) pfish->psi += 360.;
  83.     }
  84.  
  85.     if(pfish->attack) {
  86.         if(pfish->v < 1.1) pfish->spurt = 1;
  87.         if(pfish->spurt) pfish->v += 0.2;
  88.         if(pfish->v > 5.0) pfish->spurt = 0;
  89.         if((pfish->v > 1.0) && (!pfish->spurt)) pfish->v -= 0.2;
  90.     } else {
  91.         if(!(rand() % 400) && (!pfish->spurt)) pfish->spurt = 1;
  92.         if(pfish->spurt) pfish->v += 0.05;
  93.         if(pfish->v > 3.0) pfish->spurt = 0;
  94.         if((pfish->v > 1.0) && (!pfish->spurt)) pfish->v -= 0.05;
  95.     }
  96.  
  97.     pfish->x += SHARKSPEED * pfish->v * cos(pfish->psi / RAD)
  98.                     * cos(pfish->theta / RAD);
  99.     pfish->y += SHARKSPEED * pfish->v * sin(pfish->psi / RAD)
  100.                     * cos(pfish->theta / RAD);
  101.     pfish->z += SHARKSPEED * pfish->v * sin(pfish->theta / RAD);
  102. }
  103.